home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 44 / Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso / -in_the_mag- / basics / amos / moreuselssprgs.lha / ExtensionAnalyser.AMOS / ExtensionAnalyser.amosSourceCode
AMOS Source Code  |  1997-04-18  |  4KB  |  163 lines

  1. Set Buffer 80
  2. Screen Open 0,640,256,2,$8000
  3. Curs Off : Palette 0,$FFF
  4. F$=":APSystem/AMOSPro_AMCAF.Lib"
  5. 'F$=":AMOS_System/TOME.Lib"
  6. Pload F$,9
  7. ST=Start(9) : LE=Length(9)
  8. Doke ST-12,Deek(ST) and $FFFE
  9. LE1=Leek(ST) : OF1=18 : LABS=LE1/2
  10. LE2=Leek(ST+4) : OF2=OF1+LE1
  11. LE3=Leek(ST+8) : OF3=OF2+LE2
  12. LE4=Leek(ST+12) : OF4=OF3+LE3
  13. AD=ST+OF1+A*2
  14. A$="AP20"
  15. If Leek(AD)=Leek(Varptr(A$))
  16.   Add LABS,-2 : Add AD,4 : Add OF1,4
  17.   Print "This is an AMOS Pro 2.0 Extension."
  18. End If 
  19. Dim LABADR(LABS),LAB$(LABS)
  20. Print "Length of LabelTable :";LE1;At(32,);Hex$(LE1);
  21. Print At(40,);"Offset";OF1;At(56,);Hex$(OF1);At(64,);"->";LABS;" Labels"
  22. Print "Length of TokenTable :";LE2;
  23. Print At(32,);Hex$(LE2);At(40,);"Offset";OF2;At(56,);Hex$(OF2)
  24. Print "Length of LibraryCode:";LE3;
  25. Print At(32,);Hex$(LE3);At(40,);"Offset";OF3;At(56,);Hex$(OF3)
  26. Print "Length of TitleCode  :";LE4;
  27. Print At(32,);Hex$(LE4);At(40,);"Offset";OF4;At(56,);Hex$(OF4)
  28. Print "Total Len. of Library:";OF4+LE4;
  29. Print At(32,);Hex$(OF4+LE4);At(40,);"Loaded";LE;At(56,);Hex$(LE)
  30. LET=0
  31. LA=AD : LADDR=LA
  32. For A=0 To LABS-1
  33.   B=Deek(AD) : Add AD,2
  34.   Add LET,B*2
  35. Next 
  36. Print "Calculat. Len of Code:";LET;At(32,);Hex$(LET)
  37. Print "1st Routine resident : ";
  38. If Deek(ST+16) Then Print "yes" Else Print "no"
  39. Goto SKIP
  40. Print 
  41. Print "Press any key to get label offsets."
  42. Print 
  43. Open Out 1,"ram:"+ Extension_8_02F0(F$)+".lab"
  44. AD=OF3
  45. For A=0 To LABS-1
  46.   L=Deek(LA)*2 : Add LA,2
  47.   Print "Label";A;At(22,);L;At(32,);Hex$(L,4);At(40,);"Offset";AD;At(56,);Hex$(AD,4)
  48.   Print #1,"Label";A;Tab$;L;Tab$;Hex$(L,4);Tab$;"Offset";AD;Tab$;Hex$(AD,6)
  49.   LABADR(A)=AD
  50.   Add AD,L
  51.   Wait Key 
  52. Next 
  53. Close 1
  54. SKIP:
  55. Print "Press any key for Tokencheck:"
  56. Print 
  57. Wait Key 
  58. AD=ST+OF2 : OT$=""
  59. Do 
  60.   Exit If AD=>ST+OF3-2
  61.   Gosub DETOKEN
  62.   Wait Key 
  63. Loop 
  64. Print "Functions:";FUNK
  65. Print "Commands :";COMM
  66. Print "FuncsReal:";FUNK2
  67. Print "CommsReal:";COMM2
  68. AD=OF3 : LA=LADDR
  69. For A=0 To LABS-1
  70.   L=Deek(LA)*2 : Add LA,2
  71.   LABADR(A)=AD
  72.   Add AD,L
  73. Next 
  74. LA=0
  75. Print 
  76. Print "Jumps in danger:"
  77. For A=OF3 To OF4 Step 2
  78.   P=Deek(ST+A) : L=Deek(ST+A+2)
  79.   While A>LABADR(LA) and LA<LABS : Inc LA : Wend 
  80.   If(P and $FF0F)=$FE01 and L<LABS
  81.     D=Abs(LABADR(L)-A)
  82.     If D>30000
  83.       Print "Label";LA;"(";LAB$(L);"): Offset:";A;" To Label";L;"(";LAB$(L);") Distance";D
  84.       Wait Key 
  85.     End If 
  86.   End If 
  87. Next 
  88. End 
  89. DETOKEN:
  90.   LAB1=Deek(AD)
  91.   LAB2=Deek(AD+2) : Add AD,4
  92.   If LAB1<>$FFFF Then LAB1$="Com"+Str$(LAB1) Else LAB1$=""
  93.   If LAB2<>$FFFF Then LAB2$="Fun"+Str$(LAB2) Else LAB2$=""
  94.   A$=At(56,)+LAB1$+At(68,)+LAB2$
  95.   TK$="" : RF=0 : CLON=0
  96.   ER$=""
  97.   Do 
  98.     P=Peek(AD) : Inc AD
  99.     B$=Chr$(P)
  100.     If P<32
  101.       B$=""
  102.       If ER$=""
  103.         ER$="UDC"
  104.       End If 
  105.       ER$=ER$+Str$(P)
  106.     End If 
  107.     If P=$80 Then TK$=OT$ : CLON=1 : Exit 
  108.     If B$="!" Then RF=1 : B$=""
  109.     If P>$80 Then TK$=TK$+Chr$(P-$80) : Exit 
  110.     TK$=TK$+B$
  111.   Loop 
  112.   P=1
  113.   For A=1 To Len(TK$)
  114.     B$=Mid$(TK$,A,1)
  115.     If P=1 Then Mid$(TK$,A,1)=Upper$(B$) : P=0
  116.     If B$=" " Then P=1
  117.   Next 
  118.   If RF Then OT$=TK$
  119.   P=Peek(AD) : Inc AD
  120.   If P>253 Then Print TK$;At(40,);A$ : Return 
  121.   P$=Chr$(P)
  122.   SY$="" : C=1
  123.   If P$="V"
  124.     P=Peek(AD) : Inc AD
  125.     If P<255
  126.       P$=Chr$(P)
  127.       SY$="("
  128.     Else 
  129.       SY$="("+TK$ : P$="" : Dec AD
  130.     End If 
  131.   End If 
  132.   If P$="0" Then SY$=SY$+"A="+TK$+"(" : Inc FUNK : If CLON=0 Then Inc FUNK2
  133.   If P$="1" Then SY$=SY$+"A#="+TK$+"(" : Inc FUNK : If CLON=0 Then Inc FUNK2
  134.   If P$="2" Then SY$=SY$+"A$="+TK$+"(" : Inc FUNK : If CLON=0 Then Inc FUNK2
  135.   If P$>"2" and P$<="9" Then SY$="TYP"+P$+" "+TK$ : Inc FUNK : If CLON=0 Then Inc FUNK2
  136.   If P$="I" Then SY$=SY$+TK$+" " : C=0 : Inc COMM : If CLON=0 Then Inc COMM2
  137.   If SY$="" Then SY$="-ER-"
  138.   Do 
  139.     P=Peek(AD) : Inc AD
  140.     Exit If P>252
  141.     B$=Chr$(P)
  142.     PA$="-ER-"
  143.     If B$="0" Then PA$=Chr$(65+C)
  144.     If B$="1" Then PA$=Chr$(65+C)+"#"
  145.     If B$="2" Then PA$=Chr$(65+C)+"$"
  146.     If B$>"2" and B$<="9" Then PA$="TYP"+B$
  147.     SY$=SY$+PA$
  148.     P=Peek(AD) : Inc AD
  149.     Exit If P>252
  150.     B$=Chr$(P)
  151.     PA$="-ER-"
  152.     If B$="," Then PA$=","
  153.     If B$="t" Then PA$=" To "
  154.     SY$=SY$+PA$ : Inc C
  155.   Loop 
  156.   If Left$(SY$,1)="(" Then SY$=SY$+")"
  157.   If(P$=>"0") and(P$<="2") Then SY$=SY$+")" : SY$=SY$-"()"
  158.   If CLON Then SY$="  "+SY$
  159.   Print SY$;At(40,);ER$;A$
  160.   If LAB1<>$FFFF Then LAB$(LAB1)=SY$
  161.   If LAB2<>$FFFF Then LAB$(LAB2)=SY$
  162.   If AD and 1 Then Inc AD
  163. Return